package edu.yngsxy.dsstudyApi.core.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestClient;

import java.time.Duration;

@Configuration
public class RestClientConfig {
    /**
     * 建并配置一个默认的RestClient实例，设置了默认请求头Accept: application/json，表示客户端期望接收 JSON 格式的响应。这是可直接注入使用的RestClient实例。
     * @return
     */
    @Bean
    public RestClient restClient() {
        return RestClient.builder()
                .defaultHeader("Accept", "application/json")
                .build();
    }

    /**
     * 提供RestClient.Builder的 Bean，允许其他组件通过 Builder 进一步自定义RestClient（如添加拦截器、设置基础 URL 等），增强了灵活性。
     * @return
     */
    @Bean
    public RestClient.Builder restClientBuilder() {
        return RestClient.builder();
    }

    /**
     * 配置HttpComponentsClientHttpRequestFactory（基于 Apache HttpComponents 的请求工厂），设置了：
     * 连接超时时间为 5 秒（建立连接的最长等待时间）
     * 读取超时时间为 10 秒（等待服务器响应的最长时间）
     * 该工厂会被RestClient用于创建 HTTP 请求，控制网络交互的超时行为，避免请求无限期阻塞。
     * @return
     */
    @Bean
    public HttpComponentsClientHttpRequestFactory clientHttpRequestFactory() {
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
        factory.setConnectTimeout(Duration.ofSeconds(5));  // 连接超时时间
        factory.setReadTimeout(Duration.ofSeconds(10));    // 读取超时时间
        return factory;
    }
}
